
#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"
#include "math.h"

class OneLoop {
public:
    std::vector<std::vector<int>> mat;
#define White 2
#define Black 3
    int cnt=0;
    bool putable(int x,int y,int type){
        if(mat[y][x]==0||mat[y][x]==Black){
            return false;
        }
        for(int y1=y;y1>=0;y1--){
            if(mat[y1][x]==type){
                return false;
            }
        }
        for(int y1=y,x1=x;y1>=0&&x1>=0;y1--,x1--){
            if(mat[y1][x1]==type){
                return false;
            }
        }
        for(int y1=y,x1=x;y1>=0&&x1<mat.size();y1--,x1++){
            if(mat[y1][x1]==type){
                return false;
            }
        }
        return true;
    }
    void dfs(int depth,int type){
        if(depth==mat.size()){
            if(type==Black){
                dfs(0,White);
            }else{
//                for(auto &l:mat){
//                    for(auto i:l){
//                        std::cout<<i<<" ";
//                    }
//                    std::cout<<std::endl;
//                }
//
//                std::cout<<std::endl;
                cnt++;
            }
            return;
        }
        for(int i=0;i<mat.size();i++){
            if(putable(i,depth,type)){
                mat[depth][i]=type;
                dfs(depth+1,type);
                mat[depth][i]=1;
            }
        }
    }
    OneLoop(int a) {
        std::vector<int> line(a);
        for(int i=0;i<a;i++){
            for(int j=0;j<a;j++){
                std::cin>>line[j];
            }
            mat.push_back(line);
        }
        dfs(0,Black);
        printf("%d\n",cnt);
    }
};

class Solution {
public:
    void run() {

        bool first = true;
        int a, b;
        std::string s;
        while (
                std::cin >> a
//                std::getline(std::cin,s)\

                ) {
            OneLoop loop(a);
        }
    }
};


int main() {


//    for(int i=3;i<100000000;i++){
//        if(is_chun_cu(i)){
//            printf("%d,",i);
//        }
//    }

//    bool cur_num= true;
    Solution().run();
    return 0;
}

